home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / blankery / blanker / source / blanker.c < prev    next >
C/C++ Source or Header  |  1993-08-12  |  9KB  |  315 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0b
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : Michael D. Bayne
  6.  */
  7.  
  8. #include <exec/types.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/classes.h>
  11. #include <intuition/classusr.h>
  12. #include <intuition/imageclass.h>
  13. #include <intuition/gadgetclass.h>
  14. #include <libraries/gadtools.h>
  15. #include <graphics/displayinfo.h>
  16. #include <graphics/gfxbase.h>
  17. #include <clib/exec_protos.h>
  18. #include <clib/intuition_protos.h>
  19. #include <clib/gadtools_protos.h>
  20. #include <clib/graphics_protos.h>
  21. #include <clib/utility_protos.h>
  22. #include <string.h>
  23. #include <clib/diskfont_protos.h>
  24.  
  25. #include "Blanker.h"
  26.  
  27. struct Screen         *Scr = NULL;
  28. UBYTE                 *PubScreenName = NULL;
  29. APTR                   VisualInfo = NULL;
  30. struct Window         *BlankerWnd = NULL;
  31. struct Gadget         *BlankerGList = NULL;
  32. struct Menu           *BlankerMenus = NULL;
  33. struct IntuiMessage    BlankerMsg;
  34. struct Gadget         *BlankerGadgets[12];
  35. UWORD                  BlankerLeft = 0;
  36. UWORD                  BlankerTop = 12;
  37. UWORD                  BlankerWidth = 401;
  38. UWORD                  BlankerHeight = 83;
  39. UBYTE                 *BlankerWdt = (UBYTE *)"Blanker";
  40. struct TextAttr       *Font, Attr;
  41. UWORD                  FontX, FontY;
  42. UWORD                  OffX, OffY;
  43. struct TextFont       *BlankerFont = NULL;
  44.  
  45. struct NewMenu BlankerNewMenu[] = {
  46.     NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
  47.     NM_ITEM, (STRPTR)"Open...", (STRPTR)"O", 0, 0L, (APTR)BlankerOpen,
  48.     NM_ITEM, (STRPTR)"Save as...", (STRPTR)"A", 0, 0L, (APTR)BlankerSaveAs,
  49.     NM_ITEM, (STRPTR)"Load module...", (STRPTR)"M", 0, 0L, (APTR)BlankerLoadMod,
  50.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  51.     NM_ITEM, (STRPTR)"About...", (STRPTR)"?", 0, 0L, (APTR)BlankerAbout,
  52.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  53.     NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, (APTR)BlankerQuit,
  54.     NM_TITLE, (STRPTR)"Edit", NULL, 0, NULL, NULL,
  55.     NM_ITEM, (STRPTR)"Last Saved", (STRPTR)"L", 0, 0L, (APTR)BlankerLSaved,
  56.     NM_TITLE, (STRPTR)"Settings", NULL, 0, NULL, NULL,
  57.     NM_ITEM, (STRPTR)"Random Prefs?", (STRPTR)"R", CHECKIT|MENUTOGGLE, 0L, (APTR)BlankerRandPrefs,
  58.     NM_END, NULL, NULL, 0, 0L, NULL };
  59.  
  60. UWORD BlankerGTypes[] = {
  61.     BUTTON_KIND,
  62.     BUTTON_KIND,
  63.     BUTTON_KIND,
  64.     BUTTON_KIND,
  65.     TEXT_KIND,
  66.     NUMBER_KIND,
  67.     BUTTON_KIND,
  68.     TEXT_KIND,
  69.     BUTTON_KIND,
  70.     INTEGER_KIND,
  71.     STRING_KIND,
  72.     STRING_KIND
  73. };
  74.  
  75. struct NewGadget BlankerNGad[] = {
  76.     312, 51, 83, 13, (UBYTE *)"_Hide", NULL, GD_HIDE, PLACETEXT_IN, NULL, (APTR)HIDEClicked,
  77.     312, 35, 83, 13, (UBYTE *)"_Save", NULL, GD_SAVE, PLACETEXT_IN, NULL, (APTR)SAVEClicked,
  78.     312, 67, 83, 13, (UBYTE *)"_Quit", NULL, GD_QUIT, PLACETEXT_IN, NULL, (APTR)QUITClicked,
  79.     6, 3, 101, 13, (UBYTE *)"S_creen...", NULL, GD_SMODE, PLACETEXT_IN, NULL, (APTR)SMODEClicked,
  80.     112, 3, 240, 13, NULL, NULL, GD_MDISPLAY, 0, NULL, NULL,
  81.     356, 3, 39, 13, NULL, NULL, GD_SDEP, 0, NULL, NULL,
  82.     6, 19, 101, 13, (UBYTE *)"P_refs...", NULL, GD_BMOD, PLACETEXT_IN, NULL, (APTR)BMODClicked,
  83.     112, 19, 283, 13, NULL, NULL, GD_MODINFO, 0, NULL, NULL,
  84.     224, 35, 83, 13, (UBYTE *)"_Load...", NULL, GD_LMOD, PLACETEXT_IN, NULL, (APTR)LMODClicked,
  85.     177, 35, 41, 13, (UBYTE *)"_Timeout", NULL, GD_TOUT, PLACETEXT_LEFT, NULL, (APTR)TOUTClicked,
  86.     177, 51, 130, 13, (UBYTE *)"_Pop Key", NULL, GD_PKEY, PLACETEXT_LEFT, NULL, (APTR)PKEYClicked,
  87.     177, 67, 130, 13, (UBYTE *)"_Blank Key", NULL, GD_BKEY, PLACETEXT_LEFT, NULL, (APTR)BKEYClicked
  88. };
  89.  
  90. ULONG BlankerGTags[] = {
  91.     (GT_Underscore), '_', (TAG_DONE),
  92.     (GT_Underscore), '_', (TAG_DONE),
  93.     (GT_Underscore), '_', (TAG_DONE),
  94.     (GT_Underscore), '_', (TAG_DONE),
  95.     (GTTX_Border), TRUE, (TAG_DONE),
  96.     (GTNM_Number), 256, (GTNM_Border), TRUE, (TAG_DONE),
  97.     (GT_Underscore), '_', (TAG_DONE),
  98.     (GTTX_Border), TRUE, (TAG_DONE),
  99.     (GT_Underscore), '_', (TAG_DONE),
  100.     (GTIN_Number), 180, (GTIN_MaxChars), 10, (GT_Underscore), '_', (TAG_DONE),
  101.     (GTST_MaxChars), 256, (GT_Underscore), '_', (TAG_DONE),
  102.     (GTST_MaxChars), 256, (GT_Underscore), '_', (TAG_DONE)
  103. };
  104.  
  105. static UWORD ComputeX( UWORD value )
  106. {
  107.     return(( UWORD )((( FontX * value ) + 4 ) / 8 ));
  108. }
  109.  
  110. static UWORD ComputeY( UWORD value )
  111. {
  112.     return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
  113. }
  114.  
  115. static void ComputeFont( UWORD width, UWORD height )
  116. {
  117.     Forbid();
  118.     Font = &Attr;
  119.     Font->ta_Name = (STRPTR)GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name;
  120.     Font->ta_YSize = FontY = GfxBase->DefaultFont->tf_YSize;
  121.     FontX = GfxBase->DefaultFont->tf_XSize;
  122.     Permit();
  123.  
  124.     OffX = Scr->WBorLeft;
  125.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  126.  
  127.     if ( width && height ) {
  128.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  129.             goto UseTopaz;
  130.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  131.             goto UseTopaz;
  132.     }
  133.     return;
  134.  
  135. UseTopaz:
  136.     Font->ta_Name = (STRPTR)"topaz.font";
  137.     FontX = FontY = Font->ta_YSize = 8;
  138. }
  139.  
  140. int SetupScreen( void )
  141. {
  142.     if ( ! ( Scr = LockPubScreen( PubScreenName )))
  143.         return( 1L );
  144.  
  145.     ComputeFont( 0, 0 );
  146.  
  147.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  148.         return( 2L );
  149.  
  150.     return( 0L );
  151. }
  152.  
  153. void CloseDownScreen( void )
  154. {
  155.     if ( VisualInfo ) {
  156.         FreeVisualInfo( VisualInfo );
  157.         VisualInfo = NULL;
  158.     }
  159.  
  160.     if ( Scr        ) {
  161.         UnlockPubScreen( NULL, Scr );
  162.         Scr = NULL;
  163.     }
  164. }
  165.  
  166. void BlankerRender( void )
  167. {
  168.     ComputeFont( BlankerWidth, BlankerHeight );
  169.  
  170.     DrawBevelBox( BlankerWnd->RPort, OffX + ComputeX( 6 ),
  171.                     OffY + ComputeY( 35 ),
  172.                     ComputeX( 85 ),
  173.                     ComputeY( 30 ),
  174.                     GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
  175. }
  176.  
  177. int HandleBlankerIDCMP( void )
  178. {
  179.     struct IntuiMessage    *m;
  180.     struct MenuItem        *n;
  181.     int            (*func)();
  182.     BOOL            running = TRUE;
  183.  
  184.     while( m = GT_GetIMsg( BlankerWnd->UserPort )) {
  185.  
  186.         CopyMem(( char * )m, ( char * )&BlankerMsg, (long)sizeof( struct IntuiMessage ));
  187.  
  188.         GT_ReplyIMsg( m );
  189.  
  190.         switch ( BlankerMsg.Class ) {
  191.  
  192.             case    IDCMP_REFRESHWINDOW:
  193.                 GT_BeginRefresh( BlankerWnd );
  194.                 BlankerRender();
  195.                 GT_EndRefresh( BlankerWnd, TRUE );
  196.                 break;
  197.  
  198.             case    IDCMP_CLOSEWINDOW:
  199.                 running = BlankerCloseWindow();
  200.                 break;
  201.  
  202.             case    IDCMP_VANILLAKEY:
  203.                 running = BlankerVanillaKey();
  204.                 break;
  205.  
  206.             case    IDCMP_GADGETUP:
  207.                 func = ( void * )(( struct Gadget * )BlankerMsg.IAddress )->UserData;
  208.                 running = func();
  209.                 break;
  210.  
  211.             case    IDCMP_MENUPICK:
  212.                 while( BlankerMsg.Code != MENUNULL ) {
  213.                     n = ItemAddress( BlankerMenus, BlankerMsg.Code );
  214.                     func = (void *)(GTMENUITEM_USERDATA( n ));
  215.                     running = func();
  216.                     BlankerMsg.Code = n->NextSelect;
  217.                 }
  218.                 break;
  219.         }
  220.     }
  221.     return( running );
  222. }
  223.  
  224. int OpenBlankerWindow( void )
  225. {
  226.     struct NewGadget    ng;
  227.     struct Gadget    *g;
  228.     UWORD        lc, tc;
  229.     UWORD        wleft = BlankerLeft, wtop = BlankerTop, ww, wh;
  230.  
  231.     ComputeFont( BlankerWidth, BlankerHeight );
  232.  
  233.     ww = ComputeX( BlankerWidth );
  234.     wh = ComputeY( BlankerHeight );
  235.  
  236.     wleft = ( Scr->Width - ww )/2 - Scr->WBorRight;
  237.     wtop = ( Scr->Height - wh - 2*Scr->WBorBottom - Font->ta_YSize )/2;
  238.  
  239.     if ( ! ( BlankerFont = OpenDiskFont( Font )))
  240.         return( 5L );
  241.  
  242.     if ( ! ( g = CreateContext( &BlankerGList )))
  243.         return( 1L );
  244.  
  245.     for( lc = 0, tc = 0; lc < Blanker_CNT; lc++ ) {
  246.  
  247.         CopyMem((char * )&BlankerNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  248.  
  249.         ng.ng_VisualInfo = VisualInfo;
  250.         ng.ng_TextAttr   = Font;
  251.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  252.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  253.         ng.ng_Width      = ComputeX( ng.ng_Width );
  254.         ng.ng_Height     = ComputeY( ng.ng_Height);
  255.  
  256.         BlankerGadgets[ lc ] = g = CreateGadgetA((ULONG)BlankerGTypes[ lc ], g, &ng, ( struct TagItem * )&BlankerGTags[ tc ] );
  257.  
  258.         while( BlankerGTags[ tc ] ) tc += 2;
  259.         tc++;
  260.  
  261.         if ( NOT g )
  262.             return( 2L );
  263.     }
  264.  
  265.     if ( ! ( BlankerMenus = CreateMenus( BlankerNewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
  266.         return( 3L );
  267.  
  268.     LayoutMenus( BlankerMenus, VisualInfo, TAG_DONE );
  269.  
  270.     if ( ! ( BlankerWnd = OpenWindowTags( NULL,
  271.                 WA_Left,    wleft,
  272.                 WA_Top,        wtop,
  273.                 WA_Width,    ww + OffX + Scr->WBorRight,
  274.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  275.                 WA_IDCMP,    BUTTONIDCMP|TEXTIDCMP|NUMBERIDCMP|INTEGERIDCMP|STRINGIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW,
  276.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  277.                 WA_Gadgets,    BlankerGList,
  278.                 WA_Title,    BlankerWdt,
  279.                 WA_ScreenTitle,    "Blanker",
  280.                 WA_PubScreen,    Scr,
  281.                 TAG_DONE )))
  282.     return( 4L );
  283.  
  284.     SetMenuStrip( BlankerWnd, BlankerMenus );
  285.     GT_RefreshWindow( BlankerWnd, NULL );
  286.  
  287.     BlankerRender();
  288.  
  289.     return( 0L );
  290. }
  291.  
  292. void CloseBlankerWindow( void )
  293. {
  294.     if ( BlankerMenus      ) {
  295.         ClearMenuStrip( BlankerWnd );
  296.         FreeMenus( BlankerMenus );
  297.         BlankerMenus = NULL;    }
  298.  
  299.     if ( BlankerWnd        ) {
  300.         CloseWindow( BlankerWnd );
  301.         BlankerWnd = NULL;
  302.     }
  303.  
  304.     if ( BlankerGList      ) {
  305.         FreeGadgets( BlankerGList );
  306.         BlankerGList = NULL;
  307.     }
  308.  
  309.     if ( BlankerFont ) {
  310.         CloseFont( BlankerFont );
  311.         BlankerFont = NULL;
  312.     }
  313. }
  314.  
  315.